package com.ssyt.yt1.day2;

/**
 * <pre>
 * &&与&的区别？ 
 * 1）相同 
 *    都是与（并且）的操作 
 * 2）不同点 
 *    &&有短路的功能 
 *    &有位算的功能
 * </pre>
 * 
 * @author Administrator
 *
 */
public class Operator {

	/**
	 * &&有短路的功能
	 */
	public static void test1() {
		int x = 5;
		int y = 6;
		// &&，前面为false就执行短路
		// if (x > 10 && ++y > 6) {
		if (x > 10 & ++y > 6) {
			System.out.println(true);
		} else {
			System.out.println(false);
		}
		System.out.println(y);
	}

	/**
	 * &有位算的功能（转成二进制）
	 */
	public static void test2() {
		int x = 3; // 3的二进制：00000000 00000000 00000000 00000011
		int y = 6; // 6的二进制：00000000 00000000 00000000 00000110
		System.out.println(x & y); // 与 ： 00000000 00000000 00000000 00000010
		System.out.println(x | y); // 或 ： 00000000 00000000 00000000 00000111
		System.out.println(x ^ y); // 异或 ： 00000000 00000000 00000000 00000101
	}

	/**
	 * ||也有一个短路，|也可以用于位运算
	 */
	public static void test3() {
		int x = 5;
		int y = 6;
		// ||，前面为true就执行短路
		// if (x == 5 || ++y > 6) {
		if (x == 5 | ++y > 6) {
			System.out.println(true);
		} else {
			System.out.println(false);
		}
		System.out.println(y);
	}

	/**
	 * 用最有效率的方法算出2乘以8? 2 << 3
	 */
	public static void test4() {
		// 将一个数左移n位，就相当于这个数乘以2的n次方！
		// 2的二进制：00000000 00000000 00000000 00000010
		// 向左移2位：00000000 00000000 00000000 00010000
		System.out.println(2 << 3);
	}

	public static void main(String[] args) {
		test4();
	}
}
